package com.sohu.tv.cachecloud.client.basic.util;

import java.io.IOException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;

/**
 * jackson Json转换工具
 * 
 * @author leifu
 * @Date 2016年1月21日
 * @Time 上午10:55:30
 */
public class JsonUtil {

	private static final Logger logger = LoggerFactory.getLogger(JsonUtil.class);

	// 采用jackson
	private static ObjectMapper mapper = new ObjectMapper();

	/**
	 * 将对象转换为json
	 * 
	 * @param entity
	 * @return
	 */
	public static String toJson(Object entity) {
		if (entity == null) {
			return null;
		}
		try {
			return mapper.writeValueAsString(entity);
		} catch (IOException e) {
			logger.error("parse entity=" + entity + " to json error!", e);
		}
		return null;
	}

	/**
	 * 从json解析出对象
	 * 
	 * @param <T>
	 * @param content
	 * @param valueType
	 * @return
	 */
	public static <T> T fromJson(String content, Class<T> valueType) {
		if (content == null) {
			return null;
		}
		try {
			return mapper.readValue(content, valueType);
		} catch (IOException e) {
			logger.error("parse content=" + content + " error!", e);
		}
		return null;
	}

	private static ObjectMapper getObjectMapper() {
		return mapper;
	}

	public static ObjectNode createObjectNode() {
		return getObjectMapper().createObjectNode();
	}

	public static ArrayNode createArrayNode() {
		return getObjectMapper().createArrayNode();
	}
}
